#include <string>
#include <vector>
#include <iostream>

using namespace std;

// 在 C++ 中创建自定义类型 vs C++ 内建类型
//                        (int / long / char / double / vector / string / ...)
// 自定义类型：C++ 中默认不存在，由我们自己创建出来的类型
// vector<Person> queue;
// vector<Car> cars;

// 1. 创建类型自身：class 类型名 {};
// class - 告诉 C++ ，以后在程序里再见到 Person，就把它当成一个类型.
class Person {
// 2. 告诉 C++ Person 有哪些属性，描述一个 Person 是什么样子的
// 这就意味着每当我们创建一个 Person 类型的变量，我们就应该指定这个人的年龄和名字
public:
  int age;
  string name;

public:
  // 2.1 构造函数: constructor 没有返回值 / 永远与类型同名
  // 不是唯一的，它决定了创建对方的方法
  // 构造函数必须初始化一个类型的所有属性
  Person() : age(-1), name("") {
    cout << "An empty person is created." << endl;
  }

  // 构造函数的样子决定了创建 Person 的方法
  Person(int a, string n) : age(a), name(n) {
    cout << "A person is created." << endl;
  }

  // 3. 告诉 C++ Person 有哪些行为
  // 给 Person 定义方法，把函数定义在 Person 里
  // eat 叫做 Person 的一个方法
  void eat() {
    cout << name << " is eating." << endl;
  }

  void wait() {
    cout << name << " is waiting." << endl;
  }
};

// 1. 定义类型的名字
class Car {
// 2. 定义 Car 的属性
  string brand;
  double price;

// 3. 定义 Car 的构造函数
public:
  Car(string b, double d): brand(b), price(d) {
    cout << "A car is created." << endl;

  }

  ~Car() {
    cout << "Car " << brand << "is crashed." << endl;
  }
// 4. 定义 Car 的方法

};

int main(int argc, char const *argv[])
{
  /* code */
  if (1) {
    Car car {"TOYOTA", 50000};
  }

  Car car {"BMW", 100000};
  
  return 0;
}
